package indi.zjh.dp.type;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import org.apache.log4j.Logger;

public class GSet<E> extends HashSet<E> implements GTrace<E>, Serializable {
	private static Logger logger = Logger.getLogger(GSet.class);
	protected HashSet<E> newset = new HashSet<E>();
	protected HashSet<E> rmset = new HashSet<E>();
	
	public boolean add(E e)
	{
		this.newset.add(e);
		return super.add(e);
	}
	
	public void clear()
	{
		this.rmset.addAll(this);
		super.clear();
	}
	
	public boolean remove(Object o)
	{
		this.rmset.add((E)o);
		return super.remove(o);
	}
	
	/**
	 * 获取真正添加的元素集合
	 * @return
	 */
	public Set<E> getFinalAddSet()
	{
		this.newset.removeAll(this.rmset);
		return this.newset;
	}
	
	/**
	 * 获取真正移除的元素集合
	 * @return
	 */
	public Set<E> getFinalRemoveSet()
	{
		this.rmset.removeAll(this.newset);
		return this.rmset;
	}
	
	/**
	 * 清空两个临时集合
	 */
	public void clearFinalSet()
	{
		this.newset.clear();
		this.rmset.clear();
	}
	
	public static GSet<String> createStringSet()
	{
		GSet<String> gset = new GSet<String>();
		return gset;
	}
	
	public GSet addString(String str)
	{
		this.add((E)str);
		return this;
	}
	
	
}
